// 全局混入mixin.js文件

// 引入全局变量
import env from '@/utils/env.js'
// 引入压缩图片方法
// import { getLessLimitSizeImage } from '@/common/compressImage.js'
import { mapState,mapMutations } from "vuex"
	
export default {
	data() {
		return {
			nomarlColor: '#333333', // 默认文本颜色
			primaryColor: '#1BBBAF', // 主题色1
			primaryColor2: '#E5B584', // 主题色2
			redColor: '#FE4040', // 红色
			orangeColor: '#f0ad4e', // 橘色
			showPublishCateSelect: false, // 是否显示发布分类弹窗
			
			priceReg: /^\d+(?:\.\d{1,2})?$/, // 价格正则
		}
	},
	computed: {
		...mapState('m_user', ['agreePrivacy', 'token']),
	},
	// 定义全局分享
	// 1.发送给朋友
	onShareAppMessage(res) {
	  return {
			title: '校园服务喵小朋',
			path: this.getSharePath(),
			imageUrl: '/static/icon/logo.jpg',
		}
	},
	// 2.分享到朋友圈
	onShareTimeline(res) {
		return {
			title: '校园服务喵小朋',
			path: this.getSharePath(),
			imageUrl: '/static/icon/logo.jpg',
		}
	},
	methods: {
		...mapMutations('m_page', ['updateTabbarBadge']),
		
		// 获取首页路径--用于普通分享
		getSharePath() {
			return `pages/index/index`
		},
		// 获取当前页面路由
		getCurrentPath() {
			let routes = getCurrentPages() // 获取当前打开过的页面路由数组
			let curRoute = routes[routes.length - 1].route // 获取当前页面路由，也就是最后一个打开的页面路由
			if (routes[routes.length - 1].options.id) {
				const pageId = routes[routes.length - 1].options.id
				const pageUrl = '/' + curRoute + '?id=' + pageId
				return pageUrl
			}else {
				return '/' + curRoute
			}
		},
		
		// 跳转登录
		gotoLogin() {
			uni.navigateTo({
				url: '/pages/subPackage/platform/login/login'
			})
		},
		
		// 切换底部tabbar之前的回调
		beforeChangeTab(index) {
			console.log('切换tabbar，点击了', index)
			if (index==3 && !this.token) {
				// 跳转登录
				this.gotoLogin()
				return false
			}
			const routes = getCurrentPages() // 获取当前打开过的页面路由数组
			console.log('切换tabbar前的页面', '/'+routes[routes.length - 1].route)
			// 调用vuex
			this.updateBeforeChangeTab('/'+routes[routes.length - 1].route)
			return true
		},
		// 选择发布分类
		selectPublishCate(e) {
			console.log(e[0])
			if (!this.token) {
				// 跳转登录
				return this.gotoLogin()
			}
			uni.navigateTo({
				url: `/pages/subPackage/platform/publish/publish?cate=${JSON.stringify(e[0])}`
			})
		},
		
		// 预览大图，参数为当前点击图片的索引值和图片地址列表
		previewImage(i, urls) {
			console.log('preview')
		  // 调用uni.previewImage API预览图片
		  uni.previewImage({
		    // 预览时，当前点击图片的索引值
		    current: i,
		    // 需要预览的图片链接列表
		    urls: urls,
				showmenu: true
		  })
		},
		
		// 一次仅能选择一个视频
		chooseSingelVideo() {
			return new Promise((resolve,reject)=>{
				uni.chooseMedia({
					count: 1,
					mediaType: ['video'],
					sourceType: ['album', 'camera'],
					maxDuration: 15,
					sizeType: ['compressed'],
					success: (res) => {
						console.log('uni.chooseMedia', res)
						if (res.tempFiles[0].duration>15) {
							return uni.showToast({
								icon: 'none',
								title: '视频时长超过15s'
							})
						} else {
							resolve(res.tempFiles[0])
						}
					}
				})
			})
		},
		// 移除视频-清空选择视频
		removeVideo() {
			this.video.tempFilePath = '' // 视频临时地址
			this.video.thumbTempFilePath = '' // 视频封面临时地址
			this.video.width = 0 // 视频宽
			this.video.height = 0 // 视频高
		},
		// 一次仅能选择一张图片
		chooseSingelImage() {
			return new Promise((resolve,reject)=>{
				uni.chooseMedia({
					count: 1,
					mediaType: ['image'],
					sourceType: ['album', 'camera'],
					sizeType: ['compressed'],
					success: (res) => {
						console.log('uni.chooseMedia', res)
						resolve(res.tempFiles[0].tempFilePath)
					}
				})
			})
		},
		// 一次选择多张图片，参数是限制选择数量
		chooseImages(count) {
			return new Promise((resolve,reject)=>{
				uni.chooseMedia({
					count: count,
					mediaType: ['image'],
					sourceType: ['album', 'camera'],
					sizeType: ['compressed'],
					success: (res) => {
						console.log('uni.chooseMedia', res)
						resolve(res.tempFiles.map(item => item.tempFilePath))
					}
				})
			})
		},
		// 移除图片
		removeImage(index) {
			this.images.splice(index, 1)
		},
		
		// 获取七牛上传使用TOKEN
		getUploadToken() {
			this.$api.GetUploadToken({
				bucketName: 'miaoxiaopeng'
			}).then(res => {
				console.log('GetUploadToken-success', res)
				if (res.data.code === 200) {
					this.qntoken = res.data.data.token
				}
			}).catch(err => {
				console.log('GetUploadToken-fail', err)
			})
		},
		
		// 获取发布话题分类
		getPostTypeList() {
			return new Promise((resolve,reject)=>{
				this.$api.GetPostTypeList({
					"current": 1,
					"limit": 100
				}).then(res => {
					console.log('GetPostTypeList-success', res)
					if (res.data.code === 200) {
						resolve(res.data.data.records)
					}
				}).catch(err => {
					console.log('GetPostTypeList-fail', err)
				})
			})
		},
		
		// 获得开关状态
		getOpenStatus() {
			return new Promise((resolve,reject)=>{
				this.$api.GetOpenStatus().then(res => {
					console.log('GetOpenStatus-success', res)
					if (res.data.code == 200) {
						resolve(res.data.data.status)
					} else {
						resolve(0)
					}
				}).catch(err => {
					console.log('GetOpenStatus-fail', err)
					resolve(0)
				})
			})
		},
		// 获取全部角标-包括订单的角标
		getAllBadge() {
			return new Promise((resolve,reject)=>{
				this.$api.GetAllBadge().then(res => {
					console.log('GetAllBadge-success', res)
					if (res.data.code == 200) {
						this.updateTabbarBadge({
							count: res.data.data.messageCount,
							index: 3,
						})
						resolve(res.data.data.messageCount)
					}
				}).catch(err => {
					console.log('GetAllBadge-fail', err)
				})
			})
		},
		// 设置底部tabbar消息角标
		async setBadge() {
			let number = await this.getAllBadge()
			if (number) {
				uni.setTabBarBadge({
					index: 3,
					text: `${number}`
				})
			} else {
				uni.removeTabBarBadge({
					index: 3
				})
			}
		},
		
		// 跳转网页
		gotoWeb(url) {
			uni.navigateTo({
				url: '/pages/subPackage/platform/web_view/web_view?url='+url
			})
		},
		// 跳转举报
		goReport(id, type, content) {
			// type 1=动态评论;2=动态评论回复;3=动态
			uni.navigateTo({
				url: `/pages/subPackage/platform/report/report?id=${id}&type=${type}&content=${content}`
			})
		},
		
		// 拨打电话
		makePhone(phone=env.customerServiceNumber) {
			uni.makePhoneCall({
				phoneNumber: phone,
				fail(err) {
					console.log('uni.makePhoneCall', err)
				}
			})
		},
		
		// 获取前n个字符
		getNchar(value='', n=6, ex='') {
			if (value.length<=n) {
				return value
			} else {
				return value.slice(0, n) + ex
			}
		},
		
		// 校验手机号码
		verifyMobilePhone(phone) {
			var reg_phone = /^(13[0-9]|14[01456879]|15[0-35-9]|16[2567]|17[0-8]|18[0-9]|19[0-35-9])\d{8}$/  // 手机号码正则
			return reg_phone.test(phone)
		},
		
		// 将yyyy-MM-dd HH:mm:ss 转换为 MM-dd HH:mm等 2023-07-27 08:50:00
		deliveryTimeFormat (time, type='HH:mm') {
			if (time==undefined) return '--'
			const arr = time.split(' ')
			const arr0 = arr[0].split('-')
			const arr1 = arr[1].split(':')
			if (type=='HH:mm') {
				return arr1[0] + ':' + arr1[1]
			} else if (type=='MM-dd') {
				return arr0[1] + '-' + arr0[2]
			} else if (type='yyyy-MM-dd') {
				return arr0[0] + '-' + arr0[1] + '-' + arr0[2]
			}
		},
		
		// 格式金额的方法
		moneyFormat(money, decimal = 2, split = '') {
		  /*
		    parameter：
		    money：格式化目标数字/字符串，需要强转
		    decimal：保留几位小数，默认2位
		    split：千分位分隔符，默认为空
		    moneyFormat(123456789.87654321, 2, ',') // 123,456,789.88
		  */
			// console.log(parseFloat(2.1))
			// if (money==undefined || money==false) return '--'
			const num = parseFloat(money)
		  function thousandFormat (num) {
		    const len = num.length
		    return len <= 3 ? num : thousandFormat(num.slice(0, len - 3)) + split + num.slice(len - 3, len)
		  }
		  if (isFinite(num)) { // num是数字
		    if (num === 0) { // 为0
		      return num.toFixed(decimal)
		    } else { // 非0
		      var res = ''
		      var dotIndex = String(num).indexOf('.')
		      if (dotIndex === -1) { // 整数
		        if (decimal === 0) {
		          res = thousandFormat(String(num))
		        } else {
		          res = thousandFormat(String(num)) + '.' + '0'.repeat(decimal)
		        }
		      } else { // 非整数
		        // js四舍五入 Math.round()：正数时4舍5入，负数时5舍6入
		        // Math.round(1.5) = 2
		        // Math.round(-1.5) = -1
		        // Math.round(-1.6) = -2
		        // 保留decimals位小数
		        const numStr = String((Math.round(num * Math.pow(10, decimal)) / Math.pow(10, decimal)).toFixed(decimal)) // 四舍五入，然后固定保留2位小数
		        const decimals = numStr.slice(dotIndex, dotIndex + decimal + 1) // 截取小数位
		        res = thousandFormat(numStr.slice(0, dotIndex)) + decimals
		      }
		      return res
		    }
		  } else {
		    return '--'
		  }
		},
		
		// 获取今日日期
		getNowDate(seperator) { // 参数是分隔符
			// 获取当前日期
			var date = new Date()
			// 获取当前年份
			var year = date.getFullYear()
			// 获取当前月份
			var nowMonth = date.getMonth() + 1
			// 获取当前是几号
			var strDate = date.getDate()
			// 对月份进行处理，1-9月在前面添加一个“0”
			if (nowMonth >= 1 && nowMonth <= 9) {
			   nowMonth = "0" + nowMonth
			}
			// 对日期进行处理，1-9号在前面添加一个“0”
			if (strDate >= 0 && strDate <= 9) {
			   strDate = "0" + strDate
			}
			// 最后拼接字符串，分隔符是'-' 得到一个格式为(yyyy-MM-dd)的日期
			return year + seperator + nowMonth + seperator + strDate
		},
		
		// 生成唯一标识码UUID
		generateUUID() {
			var d = new Date().getTime()
			var uuid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {
				var r = (d + Math.random() * 16) % 16 | 0
				// d = Math.floor(d / 16)
				return (c == 'x' ? r : (r & 0x3 | 0x8)).toString(16)
			})
			return uuid
		},
		
		// 计算两坐标点距离
		calculDistance(location1, location2) {
			if(location1.length<1) return ''
			let lat1 = location1[0]
			let lng1 = location1[1]
			let lat2 = location2[0]
			let lng2 = location2[1]
			const radLat1 = lat1 * Math.PI / 180.0
			const radLat2 = lat2 * Math.PI / 180.0
			const a = radLat1 - radLat2
			const b = lng1 * Math.PI / 180.0 - lng2 * Math.PI / 180.0
			let s = 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(a / 2), 2) +
					 Math.cos(radLat1) * Math.cos(radLat2) * Math.pow(Math.sin(b / 2), 2)))
			s = s * 6378.137
			s = Math.round(s * 10000) / 10000  // 单位千米
			if(s >= 1){
				return s.toFixed(1) + 'km'
			}else if(s > 0.5){
				return s.toFixed(3)*1000 + 'm'
			}
			// else{
			// 	return '<500m'
			// }
		},
		
		// 格式化距离信息 distance单位m
		formatDistance(distance) {
			// console.log('distance', distance)
			let number = parseFloat(distance)/1000
			if (number > 50) {
				return '>50km'
			}else if (number > 1) {
				return number.toFixed(1)+'km'
			}else{
				return parseInt(distance)+'m'
			}
		},
		
		//使用递归的方式实现数组、对象的深拷贝
		deepClone(obj) {
			let objClone = Array.isArray(obj) ? [] : {}
			if (obj && typeof obj === "object") {
				for (var key in obj) {
					if (obj.hasOwnProperty(key)) {
						//判断ojb子元素是否为对象，如果是，递归复制
						if (obj[key] && typeof obj[key] === "object") {
							objClone[key] = this.deepClone(obj[key])
						} else {
							//如果不是，简单复制
							objClone[key] = obj[key]
						}
					}
				}
			}
			return objClone
		},

	}
}